{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**车站信息**\n",
    "\n",
    "StationReference = Name | MayBeInitial | Platforms\n",
    "\n",
    "|名称 | 是否可初始化? | 站台 |  \n",
    " |--|--|--|  \n",
    " a = 京沪高速泰安站方向 | 1 | 2, 1 \n",
    " b = 京济联络线济南方向 | 1 | 2, 1 \n",
    " c = 济郑高速长清方向 | 1 | 1, 2 \n",
    " d = 济南西站 | 1 | 1, 5, 7, 6, 11, 10, 12, 13, 16, 17, 2, 3, 4, 8, 9, 14, 15 \n",
    " e = 济南西动车所 | 1 | 2, 1 \n",
    " f = 京沪高速德州东方向 | 1 | 2, 1 \n",
    " g = 石济客专齐河方向 | 1 | 1, 2 \n",
    " h = 石济客专济南东方向 | 1 | 2, 1 \n",
    " i = 黄河南线路所 | 1 |  \n",
    " j = 大漠刘线路所 | 1 |  \n",
    "\n",
    "**时刻表**  \n",
    " \n",
    "**例子**  \n",
    "|列车编号|类型|最高时速|动拖布置|flag|车站1|车站2|车站3|   \n",
    "|--|--|--|--|--|--|--|--|  \n",
    "|G3472 |COMMUTER |300 |LPPLLPPL |X1 :| b#2#21:40:00#0| e#0#21:45:00#30 |a#0#22:19:00#0|  \n",
    "\n",
    "\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**车次相关信息**  \n",
    "车次信息不变 默认commuter  \n",
    "依照类型设置最高速度 D->200 G->300....  \n",
    "车辆细节 先默认 MTTM 后续修改长编或者重连?  \n",
    "  \n",
    "\n",
    "**停站相关信息**  \n",
    "仅三点式 进场车站 停站 离场车站  \n",
    "始发终到则进行利用抵达时刻等替换  \n",
    "公式=IF(B2<>$J$2,B2,TEXT(E2-0.5/24,\"h:mm:ss\"))    \n",
    "车站 筛选所有车次始发终到，设置字典更改进场离场   \n",
    "\n",
    "  \n",
    "**表格信息**  \n",
    "爬虫以及selenium自动化获取数据   \n",
    "二者合并为一张工作表并预处理为上图格式  \n",
    "始发站和终到站更换为进场车站和离场车站  \n",
    "  \n",
    "\n",
    "**车站信息**  \n",
    "由于自动化需要,武汉站分为京广高速场和综合场\n",
    "基于ORM大小略作修改,仅保留联络线部分  \n",
    "\n",
    "  "
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**库函数部分及常规列车信息部分**  \n",
    "- 导入库函数，处理表格以及替换字符并导出  \n",
    "- 使用字典建立常规信息的映射关系  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy\n",
    "import pandas\n",
    "import datetime\n",
    "from random import randint\n",
    "\n",
    "from selenium import webdriver\n",
    "from selenium.webdriver.common.keys import Keys  # 引用keys包\n",
    "from selenium.webdriver.common.by import By\n",
    "from selenium.webdriver.support.ui import Select\n",
    "from selenium.webdriver.common.action_chains import ActionChains\n",
    "import time\n",
    "\n",
    "\n",
    "Excelpath = \"data.xlsx\"  # Excel时刻表文件路径\n",
    "TextPath = \"train.txt\"  # 游戏时刻表文件路径\n",
    "# 速度和编组以及类型映射关系,0为普速1为动车2为高速\n",
    "species = {'K': ['120', 'LPPPPPP', 0], 'T': ['140', 'LPPPPPP', 0], 'Z': ['160', 'LPPPPPP', 0],\n",
    "           'D': ['200', 'LPPL', 1], 'C': ['200', 'LPPL', 1], 'G': ['300', 'LPPLLPPL', 2]}\n",
    "\n",
    "\n",
    "# 车站-编号,掉向,用时以及运行车辆种类映射关系\n",
    "# 图片左(0)右(1)侧线路key值相同则掉向,\n",
    "# 国铁车辆行走左侧,2为数据为左侧股道编号\n",
    "# [车站编号,车站所在侧(0为左侧),车辆进场股道,车辆离场行走股道,到达中心车站所用时间,行走车辆类型]\n",
    "station = {\n",
    "    '京沪高速泰安站方向': ['a', 0, '2', '1', 7, 'G'], '京济联络线济南方向': ['b', 0, '2', '1', 8, 'GD'], '济郑高速长清方向': ['c', 0, '2', '1', 7, 'GD'],\n",
    "    '济南西站': ['d', -1, '0', '0', 7, 'GD'], '济南西动车所': ['e', -1, '0', '0', 6, 'GDC'],\n",
    "\n",
    "    '京沪高速德州东方向': ['f', 1, '1', '2', 6, 'GD'], '石济客专齐河方向': ['g', 1, '1', '2', 6, 'GD'], '石济客专济南东方向': ['h', 1, '1', '2', 6, 'GD'],\n",
    "}\n",
    "ThisStation = '济南西站'\n",
    "TotalPlat = 18\n",
    "# track = {}\n",
    "# 车型关系--待筛选，默认短编\n",
    "marshalling = {}\n",
    "\n",
    "# 始发终到映射关系--待筛选\n",
    "dst = {}\n",
    "\n",
    "# 股道到达,图片左右侧线路,,key值不同则掉向\n",
    "# turnst = {'武九客专武汉方向': 0, '武九客专鄂州方向': 1, '武冈城际黄冈方向': 1}\n",
    "\n",
    "trainDF = pandas.DataFrame(\n",
    "    columns=['车次', '类型', '最高时速', '动拖布置', 'flag'])  # 列车整体信息\n",
    "arriveStDF = pandas.DataFrame(columns=['车站名称', '股道', '到达时间', '停站时间'])  # 进场信息\n",
    "stopStDF = pandas.DataFrame(columns=['车站名称', '股道', '到达时间', '停站时间'])  # 停站信息\n",
    "leaveStDF = pandas.DataFrame(columns=['车站名称', '股道', '到达时间', '停站时间'])  # 离场信息\n",
    "\n",
    "# 存储字符串形式的最终结果\n",
    "trainList = []\n",
    "arriveStList = []\n",
    "stopStList = []\n",
    "leaveStList = []\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**读取表格及数据处理部分**  \n",
    "- 1,读取表格并去除空行  \n",
    "- 2,从车次提取速度等级  \n",
    "- 3,筛选始发站终到站建立替换字典  \n",
    "  \n",
    "  \n",
    "**车次字符串生成部分**  \n",
    "1,车次信息部分  \n",
    " - 车次号,类型,动拖布置及flag保持默认  \n",
    " - 速度等级依照KTZDG等区分映射  \n",
    "\n",
    "2,停站部分    \n",
    " - 停站2(主要车站) 到时及停站时间来自表格部分,股道由由车站大屏生成,终到车则为任意股道  \n",
    " - 进场及离场部分 依照游戏先期测试进行平移推算,股道依照国铁车辆靠左行驶安排,  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             车次   始发站   终到站        到时        开时     检票口\n",
      "0    D1601D1604   石家庄   石家庄  11:13:00  11:41:00   检票口2A\n",
      "1    D1603D1606   石家庄   石家庄  16:41:00  17:05:00   检票口2A\n",
      "2    D1605D1602   石家庄   石家庄  12:16:00  12:40:00   检票口2A\n",
      "3    D1607D1608   石家庄   石家庄  19:20:00  19:49:00   检票口2A\n",
      "4         D1611   石家庄   青岛北  10:09:00  10:14:00   检票口4B\n",
      "..          ...   ...   ...       ...       ...     ...\n",
      "386          G7   北京南  上海虹桥  11:23:00  11:26:00   检票口6A\n",
      "387          G8  上海虹桥   北京南  11:59:00  12:02:00  检票口13A\n",
      "388        G887   北京南    盐城  09:37:00  09:39:00   检票口6A\n",
      "389        G888    盐城   北京南  17:51:00  17:54:00  检票口14A\n",
      "390          G9   北京南  上海虹桥  12:22:00  12:24:00   检票口7A\n",
      "\n",
      "[391 rows x 6 columns]\n",
      "{'菏泽东', '黄山北', '深圳北', '郑州东', '青岛北', '石家庄', '平原东', '呼和浩特东', '温州南', '杭州西', '济南西', '江门', '北京南', '上海虹桥', '济南东', '青岛', '运城北', '福州', '盐城', '沈阳北', '宁波', '烟台', '杭州东', '天津西', '曲阜东', '南昌西', '临沂北', '厦门北', '济南', '太原南'}\n"
     ]
    }
   ],
   "source": [
    "# 读取文件\n",
    "sheet0 = pandas.read_excel(io=Excelpath, sheet_name=\"Sheet1\")  # 车次及始发终到和检票口信息\n",
    "\n",
    "# 去除空行\n",
    "#sheet0 = sheet0.dropna()\n",
    "sheet0 = sheet0[~(sheet0[\"车次\"].isnull())]  # 删掉空行\n",
    "\n",
    "sheet = sheet0\n",
    "sheet = sheet.reset_index(drop=True)  # 按照车次信息进行连接，合并检票口sheet1\n",
    "sheet = sheet.drop_duplicates(subset=\"车次\")\n",
    "# sheet.replace(\"--:--\",numpy.nan())\n",
    "# sheet=sheet.fillna(value=0)\n",
    "\n",
    "print(sheet)\n",
    "\n",
    "trainInfo = sheet[\"车次\"].to_frame()  # 车辆信息\n",
    "# 统计始发终到车站信息\n",
    "ts = pandas.concat([sheet0[\"始发站\"].value_counts(),\n",
    "                   sheet0[\"终到站\"].value_counts()])\n",
    "totalStation = ts.index\n",
    "\n",
    "print(set(list(totalStation)))  # 所有始发站和终到站统计\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**始发终到替换**  \n",
    "存在多路径问题  \n",
    "- 如从济南站到青岛站,有济青高速和胶济客专,在济南西站的上下行不同   \n",
    "- 手动替换准确度低"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 手动建立映射关系,别的方法不会\n",
    "\n",
    "def getArrLeaSt(trainNUm, station):\n",
    "    speedType = trainNUm[0]\n",
    "    up_down = int(trainNUm[-1]) % 2\n",
    "    stcode = \"\"\n",
    "    # 多路径车站部分,区分上下行\n",
    "    if speedType == \"D\":  # \n",
    "        ArrLeaveSt = {\n",
    "            '青岛北': '京济联络线济南方向',\n",
    "            '青岛': '京济联络线济南方向',\n",
    "            '盐城': '京济联络线济南方向',\n",
    "            '烟台': '京济联络线济南方向',\n",
    "\n",
    "        }\n",
    "    else :  # \n",
    "        ArrLeaveSt = {\n",
    "            '青岛北': '石济客专济南东方向',           \n",
    "            '青岛': '石济客专济南东方向',\n",
    "            '盐城': '石济客专济南东方向',\n",
    "            '烟台': '石济客专济南东方向',\n",
    "\n",
    "        }\n",
    "\n",
    "    stcode = ArrLeaveSt.get(station)\n",
    "    if stcode != None:\n",
    "        print(\"车次:{0} 车站:{1} \".format(trainNUm, station))\n",
    "        return stcode\n",
    "\n",
    "    # 常规单路径车站\n",
    "    ArrLeaveSt = {\n",
    "        '济南': '京济联络线济南方向',\n",
    "        '济南西':'济南西动车所',\n",
    "        '济南东': '石济客专济南东方向',\n",
    "        '石家庄': '石济客专齐河方向',\n",
    "        '太原南': '石济客专齐河方向',\n",
    "        '运城北': '石济客专齐河方向',\n",
    "        '郑州东': '济郑高速长清方向',\n",
    "        '上海虹桥': '京沪高速泰安站方向',\n",
    "        '呼和浩特东': '石济客专齐河方向',\n",
    "        '平原东': '石济客专齐河方向',\n",
    "        '北京南': '京沪高速德州东方向',\n",
    "        '杭州东': '京沪高速泰安站方向',\n",
    "        '沈阳北': '京沪高速德州东方向',\n",
    "        '宁波': '京沪高速泰安站方向',\n",
    "        '福州': '京沪高速泰安站方向',\n",
    "        '杭州西': '京沪高速泰安站方向',\n",
    "        '南昌西': '京沪高速泰安站方向',\n",
    "        '温州南': '京沪高速泰安站方向',\n",
    "        '江门': '京沪高速泰安站方向',\n",
    "        '黄山北': '京沪高速泰安站方向',\n",
    "        '菏泽东': '京沪高速泰安站方向',\n",
    "        '天津西': '京沪高速德州东方向',\n",
    "        '临沂北': '石济客专济南东方向',\n",
    "        '深圳北': '京沪高速泰安站方向',\n",
    "        '厦门北': '京沪高速泰安站方向',\n",
    "        '曲阜东': '京沪高速泰安站方向',\n",
    "    }\n",
    "    stcode = ArrLeaveSt.get(station)\n",
    "    if stcode != None:\n",
    "        return stcode\n",
    "    else:\n",
    "        print(\"车次:{0} 车站:{1} 未找到\".format(trainNUm, station))\n",
    "        exit()\n",
    "\n",
    "\n",
    "def checkin(entrance):\n",
    "    # 终到车\n",
    "    if entrance == 0:\n",
    "        return 0\n",
    "    else:  # 检票口15A 非终到车\n",
    "        return int(entrance.strip(\"检票口AB\"))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>车次</th>\n",
       "      <th>类型</th>\n",
       "      <th>最高时速</th>\n",
       "      <th>动拖布置</th>\n",
       "      <th>flag</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>D1601D1604</td>\n",
       "      <td>COMMUTER</td>\n",
       "      <td>200</td>\n",
       "      <td>LPPL</td>\n",
       "      <td>X1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>D1603D1606</td>\n",
       "      <td>COMMUTER</td>\n",
       "      <td>200</td>\n",
       "      <td>LPPL</td>\n",
       "      <td>X1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>D1605D1602</td>\n",
       "      <td>COMMUTER</td>\n",
       "      <td>200</td>\n",
       "      <td>LPPL</td>\n",
       "      <td>X1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>D1607D1608</td>\n",
       "      <td>COMMUTER</td>\n",
       "      <td>200</td>\n",
       "      <td>LPPL</td>\n",
       "      <td>X1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>D1611</td>\n",
       "      <td>COMMUTER</td>\n",
       "      <td>200</td>\n",
       "      <td>LPPL</td>\n",
       "      <td>X1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           车次        类型 最高时速  动拖布置 flag\n",
       "0  D1601D1604  COMMUTER  200  LPPL   X1\n",
       "1  D1603D1606  COMMUTER  200  LPPL   X1\n",
       "2  D1605D1602  COMMUTER  200  LPPL   X1\n",
       "3  D1607D1608  COMMUTER  200  LPPL   X1\n",
       "4       D1611  COMMUTER  200  LPPL   X1"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 生成车次信息\n",
    "# '列车编号','类型','最高时速','动拖布置','flag' 列车整体信息\n",
    "\n",
    "for index, row in trainInfo.iterrows():\n",
    "    trainNum = row[\"车次\"]\n",
    "    maxspeed = (species.get(trainNum[0]))[0]  # 有字头的列车\n",
    "    if maxspeed == None:  # 最高速度未找到\n",
    "        maxspeed = '120'  # 普客\n",
    "\n",
    "    marshalling = (species.get(trainNum[0]))[1]\n",
    "    # trainTC=marshalling.get() #动拖布置\n",
    "    trainDF.loc[index] = [trainNum, \"COMMUTER\", maxspeed, marshalling, \"X1\"]\n",
    "    trainList.append(\"{0} {1} {2} {3} {4} : \".format(\n",
    "        trainNum, \"COMMUTER\", maxspeed, marshalling, \"X1\"))\n",
    "trainDF.head()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "mainstation = \"武汉\"\n",
    "\n",
    "# wd = webdriver.Firefox()\n",
    "# wd.implicitly_wait(10)\n",
    "# wd.get('https://www.12306.cn/index/view/infos/ticket_check.html')\n",
    "\n",
    "\n",
    "def getEntance(wd, mainstation, checi):\n",
    "    # 输入车次并确认\n",
    "    element1 = wd.find_element(By.XPATH, '//*[@id=\"ticket_check_trainNum\"]')\n",
    "\n",
    "    element1.clear()\n",
    "    element1.send_keys(checi+'\\n')\n",
    "    time.sleep(1)\n",
    "    element1.send_keys(Keys.ENTER)  # 回车键Enter\n",
    "\n",
    "    # 点击下拉框以获得停站选项\n",
    "    time.sleep(1)\n",
    "    wd.find_element(By.XPATH, '//*[@id=\"ticketEntranceSel\"]').click()\n",
    "\n",
    "    # 选择停站\n",
    "    time.sleep(1)\n",
    "    elements = wd.find_elements(By.CSS_SELECTOR, '.model-select-option > li')\n",
    "    for ele in elements:  # 在所有停站中遍历信息\n",
    "        if ele.text == station:\n",
    "            ele.click()  # 点击下拉框对应选项确认\n",
    "            # 如果查询到\n",
    "            btn = wd.find_element(By.CSS_SELECTOR, \".btn\")\n",
    "            btn.click()  # 点击查询按钮\n",
    "            checkin = wd.find_elements(By.CSS_SELECTOR, \".check-numnew\")\n",
    "            time.sleep(0.5)\n",
    "            entrance = checkin[0].text  # 得到检票口文本信息\n",
    "            print(\"车次:{0},检票口:{1}\".format(checi, entrance))\n",
    "            return entrance\n",
    "    # 没有查询到则为终到车次\n",
    "    print(\"车次:{0} ,{1}站无检票口信息\".format(checi, station))\n",
    "    return 0\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "车次:D1611 车站:青岛北 \n",
      "车次:D1612 车站:青岛北 \n",
      "车次:D1615 车站:烟台 \n",
      "车次:D1616 车站:烟台 \n",
      "车次:D1621 车站:烟台 \n",
      "车次:D1622 车站:烟台 \n",
      "车次:D1625 车站:烟台 \n",
      "车次:D1626 车站:烟台 \n",
      "车次:D1631 车站:青岛北 \n",
      "车次:D1632 车站:青岛北 \n",
      "车次:D1635 车站:青岛 \n",
      "车次:D1636 车站:青岛 \n",
      "车次:D1673 车站:青岛北 \n",
      "车次:D1674 车站:青岛北 \n",
      "车次:D6004D6053 车站:青岛 \n",
      "车次:D6004D6053 车站:烟台 \n",
      "车次:D6006 车站:青岛 \n",
      "车次:D6007 车站:青岛 \n",
      "车次:D6015 车站:青岛 \n",
      "车次:D6017 车站:青岛 \n",
      "车次:D6023 车站:青岛 \n",
      "车次:D6024D6023 车站:青岛 \n",
      "车次:D6024D6023 车站:青岛 \n",
      "车次:D6051 车站:烟台 \n",
      "车次:D6055 车站:烟台 \n",
      "车次:D6061 车站:烟台 \n",
      "车次:D6063 车站:烟台 \n",
      "车次:D6077 车站:烟台 \n",
      "车次:D6078 车站:烟台 \n",
      "车次:D6080 车站:烟台 \n",
      "车次:D6087 车站:烟台 \n",
      "车次:D6089 车站:烟台 \n",
      "车次:D8175 车站:烟台 \n",
      "车次:D8176 车站:烟台 \n",
      "车次:D8181 车站:青岛 \n",
      "车次:D8183 车站:青岛 \n",
      "车次:D8184G6921 车站:青岛 \n",
      "车次:D8184G6921 车站:青岛 \n",
      "车次:D8185D8186 车站:青岛北 \n",
      "车次:D8185D8186 车站:青岛北 \n",
      "车次:G1063 车站:青岛 \n",
      "车次:G1066 车站:青岛 \n",
      "车次:G1067 车站:青岛 \n",
      "车次:G1068 车站:青岛 \n",
      "车次:G1069 车站:青岛 \n",
      "车次:G1070 车站:青岛 \n",
      "车次:G1071 车站:青岛 \n",
      "车次:G1073 车站:青岛 \n",
      "车次:G1074 车站:青岛 \n",
      "车次:G1075 车站:青岛 \n",
      "车次:G1076 车站:青岛 \n",
      "车次:G1077 车站:青岛 \n",
      "车次:G1079 车站:青岛 \n",
      "车次:G1080 车站:青岛 \n",
      "车次:G1083 车站:烟台 \n",
      "车次:G1086 车站:烟台 \n",
      "车次:G1088 车站:烟台 \n",
      "车次:G1089 车站:烟台 \n",
      "车次:G1090 车站:烟台 \n",
      "车次:G1091 车站:烟台 \n",
      "车次:G1094 车站:烟台 \n",
      "车次:G1207 车站:青岛北 \n",
      "车次:G1208 车站:青岛北 \n",
      "车次:G1210G6939 车站:烟台 \n",
      "车次:G1247 车站:青岛北 \n",
      "车次:G1248 车站:青岛北 \n",
      "车次:G1267 车站:青岛北 \n",
      "车次:G1268 车站:青岛北 \n",
      "车次:G1565 车站:盐城 \n",
      "车次:G1566 车站:盐城 \n",
      "车次:G2573 车站:盐城 \n",
      "车次:G2575 车站:盐城 \n",
      "车次:G2577 车站:盐城 \n",
      "车次:G2580 车站:盐城 \n",
      "车次:G2581 车站:盐城 \n",
      "车次:G2582 车站:盐城 \n",
      "车次:G2584 车站:盐城 \n",
      "车次:G2586 车站:盐城 \n",
      "车次:G2587 车站:盐城 \n",
      "车次:G2590 车站:盐城 \n",
      "车次:G2641 车站:盐城 \n",
      "车次:G2642 车站:盐城 \n",
      "车次:G2667 车站:烟台 \n",
      "车次:G2669 车站:烟台 \n",
      "车次:G451 车站:青岛 \n",
      "车次:G6902 车站:青岛 \n",
      "车次:G6907 车站:青岛 \n",
      "车次:G6911 车站:青岛 \n",
      "车次:G6912 车站:青岛北 \n",
      "车次:G6915 车站:青岛北 \n",
      "车次:G6917 车站:青岛北 \n",
      "车次:G6921 车站:青岛 \n",
      "车次:G6923 车站:青岛北 \n",
      "车次:G6925 车站:青岛北 \n",
      "车次:G6926 车站:青岛北 \n",
      "车次:G6928 车站:青岛 \n",
      "车次:G6929 车站:烟台 \n",
      "车次:G6930 车站:烟台 \n",
      "车次:G6934D6031 车站:烟台 \n",
      "车次:G6934D6031 车站:烟台 \n",
      "车次:G6943 车站:烟台 \n",
      "车次:G6949 车站:青岛北 \n",
      "车次:G6949 车站:青岛北 \n",
      "车次:G6955 车站:青岛北 \n",
      "车次:G6955 车站:青岛北 \n",
      "车次:G6957 车站:青岛北 \n",
      "车次:G6957 车站:青岛北 \n",
      "车次:G6963 车站:青岛北 \n",
      "车次:G6969 车站:青岛北 \n",
      "车次:G6970 车站:青岛北 \n",
      "车次:G6975 车站:青岛北 \n",
      "车次:G6975 车站:青岛北 \n",
      "车次:G6977 车站:青岛北 \n",
      "车次:G6977 车站:青岛北 \n",
      "车次:G6981 车站:烟台 \n",
      "车次:G6985 车站:烟台 \n",
      "车次:G6987 车站:烟台 \n",
      "车次:G887 车站:盐城 \n",
      "车次:G888 车站:盐城 \n"
     ]
    }
   ],
   "source": [
    "# 生成停站信息\n",
    "for index, row in sheet.iterrows():\n",
    "    arriveSt = getArrLeaSt(row[\"车次\"], row[\"始发站\"])\n",
    "    leaveSt = getArrLeaSt(row[\"车次\"], row[\"终到站\"])\n",
    "\n",
    "    # 上下行编号区分车辆进场股道为1,2道,进场及离场股道\n",
    "    # 靠左行走\n",
    "    arriveTrack = station.get(arriveSt)[2]\n",
    "    leaveTrack = station.get(leaveSt)[3]\n",
    "\n",
    "    # 停站股道,依照检票口选择,没有则填为0，任意股道\n",
    "    # 使用int()去掉float类型的.0,防止因为格式问题读不出股道\n",
    "    row = row.fillna(0)\n",
    "    stopTrack = checkin(row[\"检票口\"])\n",
    "\n",
    "    at = row[\"到时\"]\n",
    "\n",
    "    lt = row[\"开时\"]\n",
    "\n",
    "    # 统一时间格式\n",
    "\n",
    "    strTime1 = datetime.datetime.strptime(str(at), \"%H:%M:%S\")\n",
    "    strTime2 = datetime.datetime.strptime(str(lt), \"%H:%M:%S\")\n",
    "\n",
    "    stopTime = (strTime2-strTime1).seconds/60  # 分钟为单位的停站时间\n",
    "\n",
    "    # 时间处理部分,由到达时刻推出进场时刻\n",
    "    arrTime1 = strTime1-datetime.timedelta(minutes=(station.get(arriveSt))[4])\n",
    "    arrTime2 = str(arrTime1.strftime('%Y-%m-%d %H:%M:%S'))[-8:]  # 仅保留时分秒\n",
    "    arrTime = datetime.datetime.strptime(arrTime2, \"%H:%M:%S\")  # 转换格式\n",
    "\n",
    "    # 离场时刻\n",
    "    leaveTime1 = strTime2+datetime.timedelta(minutes=(station.get(leaveSt))[4])\n",
    "    leaveTime2 = str(leaveTime1.strftime('%Y-%m-%d %H:%M:%S'))[-8:]\n",
    "    leaveTime = datetime.datetime.strptime(leaveTime2, \"%H:%M:%S\")\n",
    "\n",
    "    # 进场\n",
    "    arriveStDF.loc[index] = [arriveSt, arriveTrack, arrTime2, 0]\n",
    "    arriveStList.append(\"{0}#{1}#{2}#{3}\".format(\n",
    "        (station.get(arriveSt))[0], arriveTrack, arrTime2, 0))\n",
    "    # 停站\n",
    "    stopStDF.loc[index] = [ThisStation, stopTrack, row[\"到时\"], stopTime]\n",
    "    stopStList.append(\"{0}#{1}#{2}#{3}\".format(\n",
    "        (station.get(ThisStation))[0], stopTrack, row[\"到时\"], int(stopTime)))\n",
    "\n",
    "    # 离场\n",
    "    leaveStDF.loc[index] = [leaveSt, leaveTrack, leaveTime2, 0]\n",
    "    leaveStList.append(\"{0}#{1}#{2}#{3}\".format(\n",
    "        (station.get(leaveSt))[0], leaveTrack, leaveTime2, 0))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "       车站名称 股道      到达时间  停站时间\n",
      "0  石济客专齐河方向  1  11:07:00     0\n",
      "1  石济客专齐河方向  1  16:35:00     0\n",
      "2  石济客专齐河方向  1  12:10:00     0\n",
      "3  石济客专齐河方向  1  19:14:00     0\n",
      "4  石济客专齐河方向  1  10:03:00     0 \n",
      "    车站名称  股道      到达时间  停站时间\n",
      "0  济南西站   2  11:13:00  28.0\n",
      "1  济南西站   2  16:41:00  24.0\n",
      "2  济南西站   2  12:16:00  24.0\n",
      "3  济南西站   2  19:20:00  29.0\n",
      "4  济南西站   4  10:09:00   5.0 \n",
      "         车站名称 股道      到达时间  停站时间\n",
      "0   石济客专齐河方向  2  11:47:00     0\n",
      "1   石济客专齐河方向  2  17:11:00     0\n",
      "2   石济客专齐河方向  2  12:46:00     0\n",
      "3   石济客专齐河方向  2  19:55:00     0\n",
      "4  京济联络线济南方向  1  10:22:00     0\n"
     ]
    }
   ],
   "source": [
    "print(arriveStDF.head(), '\\n', stopStDF.head(), '\\n', leaveStDF.head())  # 部分信息\n",
    "# wd.quit()\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**最终车次结果**  \n",
    "合并车辆信息和停站信息  \n",
    "  \n",
    "**导出部分**  \n",
    "导出为train.txt手动附加原文件头部之后替换原时刻表文件  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['D1601D1604 COMMUTER 200 LPPL X1 : g#1#11:07:00#0 d#2#11:13:00#28 g#2#11:47:00#0 ',\n",
       " 'D1603D1606 COMMUTER 200 LPPL X1 : g#1#16:35:00#0 d#2#16:41:00#24 g#2#17:11:00#0 ',\n",
       " 'D1605D1602 COMMUTER 200 LPPL X1 : g#1#12:10:00#0 d#2#12:16:00#24 g#2#12:46:00#0 ',\n",
       " 'D1607D1608 COMMUTER 200 LPPL X1 : g#1#19:14:00#0 d#2#19:20:00#29 g#2#19:55:00#0 ',\n",
       " 'D1611 COMMUTER 200 LPPL X1 : g#1#10:03:00#0 d#4#10:09:00#5 b#1#10:22:00#0 ',\n",
       " 'D1612 COMMUTER 200 LPPL X1 : b#2#16:12:00#0 d#17#16:20:00#2 g#2#16:28:00#0 ',\n",
       " 'D1615 COMMUTER 200 LPPL X1 : g#1#16:52:00#0 d#4#16:58:00#4 b#1#17:10:00#0 ',\n",
       " 'D1616 COMMUTER 200 LPPL X1 : b#2#13:39:00#0 d#16#13:47:00#3 g#2#13:56:00#0 ',\n",
       " 'D1621 COMMUTER 200 LPPL X1 : g#1#09:35:00#0 d#4#09:41:00#12 b#1#10:01:00#0 ',\n",
       " 'D1622 COMMUTER 200 LPPL X1 : b#2#20:17:00#0 d#17#20:25:00#4 g#2#20:35:00#0 ',\n",
       " 'D1625 COMMUTER 200 LPPL X1 : g#1#18:39:00#0 d#1#18:45:00#8 b#1#19:01:00#0 ',\n",
       " 'D1626 COMMUTER 200 LPPL X1 : b#2#11:22:00#0 d#17#11:30:00#4 g#2#11:40:00#0 ',\n",
       " 'D1631 COMMUTER 200 LPPL X1 : g#1#12:41:00#0 d#2#12:47:00#7 b#1#13:02:00#0 ',\n",
       " 'D1632 COMMUTER 200 LPPL X1 : b#2#18:38:00#0 d#16#18:46:00#8 g#2#19:00:00#0 ',\n",
       " 'D1635 COMMUTER 200 LPPL X1 : g#1#17:54:00#0 d#2#18:00:00#5 b#1#18:13:00#0 ',\n",
       " 'D1636 COMMUTER 200 LPPL X1 : b#2#10:27:00#0 d#17#10:35:00#2 g#2#10:43:00#0 ',\n",
       " 'D1643 COMMUTER 200 LPPL X1 : g#1#22:32:00#0 d#0#22:38:00#12 e#0#22:56:00#0 ',\n",
       " 'D1644 COMMUTER 200 LPPL X1 : e#0#08:40:00#0 d#2#08:46:00#18 g#2#09:10:00#0 ',\n",
       " 'D1673 COMMUTER 200 LPPL X1 : c#2#19:00:00#0 d#4#19:07:00#4 b#1#19:19:00#0 ',\n",
       " 'D1674 COMMUTER 200 LPPL X1 : b#2#09:04:00#0 d#16#09:12:00#10 c#1#09:29:00#0 ',\n",
       " 'D2123 COMMUTER 200 LPPL X1 : e#0#08:13:00#0 d#2#08:19:00#18 a#1#08:44:00#0 ',\n",
       " 'D2124 COMMUTER 200 LPPL X1 : a#2#22:37:00#0 d#0#22:44:00#16 e#0#23:06:00#0 ',\n",
       " 'D2777 COMMUTER 200 LPPL X1 : g#1#18:54:00#0 d#0#19:00:00#20 e#0#19:26:00#0 ',\n",
       " 'D2778 COMMUTER 200 LPPL X1 : e#0#08:06:00#0 d#17#08:12:00#18 g#2#08:36:00#0 ',\n",
       " 'D6004D6053 COMMUTER 200 LPPL X1 : b#2#10:01:00#0 d#1#10:09:00#159 b#1#12:56:00#0 ',\n",
       " 'D6006 COMMUTER 200 LPPL X1 : b#2#12:10:00#0 d#17#12:18:00#2 g#2#12:26:00#0 ',\n",
       " 'D6007 COMMUTER 200 LPPL X1 : e#0#11:11:00#0 d#4#11:17:00#18 b#1#11:43:00#0 ',\n",
       " 'D6015 COMMUTER 200 LPPL X1 : h#1#08:13:00#0 d#4#08:19:00#2 b#1#08:29:00#0 ',\n",
       " 'D6017 COMMUTER 200 LPPL X1 : b#2#18:29:00#0 d#17#18:37:00#8 h#2#18:51:00#0 ',\n",
       " 'D6019 COMMUTER 200 LPPL X1 : h#1#17:47:00#0 d#1#17:53:00#3 b#1#18:04:00#0 ',\n",
       " 'D6020D6007 COMMUTER 200 LPPL X1 : b#2#07:58:00#0 d#4#08:06:00#209 e#0#11:41:00#0 ',\n",
       " 'D6023 COMMUTER 200 LPPL X1 : e#0#15:52:00#0 d#16#15:58:00#18 b#1#16:24:00#0 ',\n",
       " 'D6024D6023 COMMUTER 200 LPPL X1 : b#2#15:49:00#0 d#16#15:57:00#19 b#1#16:24:00#0 ',\n",
       " 'D6038 COMMUTER 200 LPPL X1 : b#2#20:52:00#0 d#0#21:00:00#20 e#0#21:26:00#0 ',\n",
       " 'D6051 COMMUTER 200 LPPL X1 : e#0#06:25:00#0 d#4#06:31:00#18 b#1#06:57:00#0 ',\n",
       " 'D6055 COMMUTER 200 LPPL X1 : b#2#15:40:00#0 d#15#15:48:00#2 h#2#15:56:00#0 ',\n",
       " 'D6061 COMMUTER 200 LPPL X1 : g#1#13:53:00#0 d#3#13:59:00#8 b#1#14:15:00#0 ',\n",
       " 'D6063 COMMUTER 200 LPPL X1 : b#2#15:09:00#0 d#15#15:17:00#6 h#2#15:29:00#0 ',\n",
       " 'D6077 COMMUTER 200 LPPL X1 : g#1#17:38:00#0 d#2#17:44:00#4 b#1#17:56:00#0 ',\n",
       " 'D6078 COMMUTER 200 LPPL X1 : b#2#19:26:00#0 d#0#19:34:00#22 e#0#20:02:00#0 ',\n",
       " 'D6080 COMMUTER 200 LPPL X1 : b#2#16:00:00#0 d#17#16:08:00#2 g#2#16:16:00#0 ',\n",
       " 'D6087 COMMUTER 200 LPPL X1 : h#1#07:35:00#0 d#2#07:41:00#2 b#1#07:51:00#0 ',\n",
       " 'D6089 COMMUTER 200 LPPL X1 : b#2#19:44:00#0 d#16#19:52:00#2 h#2#20:00:00#0 ',\n",
       " 'D8175 COMMUTER 200 LPPL X1 : h#1#09:55:00#0 d#2#10:01:00#2 b#1#10:11:00#0 ',\n",
       " 'D8176 COMMUTER 200 LPPL X1 : b#2#18:08:00#0 d#0#18:16:00#14 e#0#18:36:00#0 ',\n",
       " 'D8181 COMMUTER 200 LPPL X1 : e#0#09:19:00#0 d#1#09:25:00#18 b#1#09:51:00#0 ',\n",
       " 'D8183 COMMUTER 200 LPPL X1 : e#0#09:59:00#0 d#1#10:05:00#18 b#1#10:31:00#0 ',\n",
       " 'D8184G6921 COMMUTER 200 LPPL X1 : b#2#15:18:00#0 d#16#15:26:00#17 b#1#15:51:00#0 ',\n",
       " 'D8185D8186 COMMUTER 200 LPPL X1 : b#2#15:28:00#0 d#17#15:36:00#25 b#1#16:09:00#0 ',\n",
       " 'G10 COMMUTER 300 LPPLLPPL X1 : a#2#12:51:00#0 d#11#12:58:00#2 f#2#13:06:00#0 ',\n",
       " 'G101 COMMUTER 300 LPPLLPPL X1 : f#1#07:50:00#0 d#7#07:56:00#2 a#1#08:05:00#0 ',\n",
       " 'G102 COMMUTER 300 LPPLLPPL X1 : a#2#10:31:00#0 d#12#10:38:00#4 f#2#10:48:00#0 ',\n",
       " 'G103 COMMUTER 300 LPPLLPPL X1 : f#1#07:55:00#0 d#6#08:01:00#3 a#1#08:11:00#0 ',\n",
       " 'G104 COMMUTER 300 LPPLLPPL X1 : a#2#11:11:00#0 d#14#11:18:00#4 f#2#11:28:00#0 ',\n",
       " 'G1045 COMMUTER 300 LPPLLPPL X1 : f#1#20:10:00#0 d#0#20:16:00#14 e#0#20:36:00#0 ',\n",
       " 'G1047 COMMUTER 300 LPPLLPPL X1 : f#1#19:52:00#0 d#3#19:58:00#1422 e#0#19:46:00#0 ',\n",
       " 'G1048 COMMUTER 300 LPPLLPPL X1 : b#2#07:13:00#0 d#12#07:21:00#2 f#2#07:29:00#0 ',\n",
       " 'G1049 COMMUTER 300 LPPLLPPL X1 : f#1#21:49:00#0 d#0#21:55:00#25 e#0#22:26:00#0 ',\n",
       " 'G105 COMMUTER 300 LPPLLPPL X1 : f#1#08:52:00#0 d#5#08:58:00#2 a#1#09:07:00#0 ',\n",
       " 'G1050 COMMUTER 300 LPPLLPPL X1 : e#0#07:18:00#0 d#11#07:24:00#18 f#2#07:48:00#0 ',\n",
       " 'G1053 COMMUTER 300 LPPLLPPL X1 : f#1#22:47:00#0 d#0#22:53:00#12 e#0#23:11:00#0 ',\n",
       " 'G1054 COMMUTER 300 LPPLLPPL X1 : a#2#07:50:00#0 d#11#07:57:00#9 f#2#08:12:00#0 ',\n",
       " 'G106 COMMUTER 300 LPPLLPPL X1 : a#2#11:24:00#0 d#10#11:31:00#3 f#2#11:40:00#0 ',\n",
       " 'G1062 COMMUTER 300 LPPLLPPL X1 : b#2#08:54:00#0 d#10#09:02:00#2 f#2#09:10:00#0 ',\n",
       " 'G1063 COMMUTER 300 LPPLLPPL X1 : f#1#11:10:00#0 d#5#11:16:00#2 h#2#11:24:00#0 ',\n",
       " 'G1066 COMMUTER 300 LPPLLPPL X1 : h#1#11:05:00#0 d#16#11:11:00#2 f#2#11:19:00#0 ',\n",
       " 'G1067 COMMUTER 300 LPPLLPPL X1 : f#1#13:19:00#0 d#5#13:25:00#3 h#2#13:34:00#0 ',\n",
       " 'G1068 COMMUTER 300 LPPLLPPL X1 : h#1#13:12:00#0 d#16#13:18:00#9 f#2#13:33:00#0 ',\n",
       " 'G1069 COMMUTER 300 LPPLLPPL X1 : f#1#14:37:00#0 d#4#14:43:00#2 h#2#14:51:00#0 ',\n",
       " 'G107 COMMUTER 300 LPPLLPPL X1 : f#1#09:02:00#0 d#5#09:08:00#3 a#1#09:18:00#0 ',\n",
       " 'G1070 COMMUTER 300 LPPLLPPL X1 : h#1#15:00:00#0 d#17#15:06:00#8 f#2#15:20:00#0 ',\n",
       " 'G1071 COMMUTER 300 LPPLLPPL X1 : f#1#14:53:00#0 d#4#14:59:00#4 h#2#15:09:00#0 ',\n",
       " 'G1073 COMMUTER 300 LPPLLPPL X1 : f#1#15:22:00#0 d#4#15:28:00#9 h#2#15:43:00#0 ',\n",
       " 'G1074 COMMUTER 300 LPPLLPPL X1 : h#1#17:30:00#0 d#17#17:36:00#4 f#2#17:46:00#0 ',\n",
       " 'G1075 COMMUTER 300 LPPLLPPL X1 : f#1#17:27:00#0 d#5#17:33:00#8 h#2#17:47:00#0 ',\n",
       " 'G1076 COMMUTER 300 LPPLLPPL X1 : h#1#19:01:00#0 d#16#19:07:00#8 f#2#19:21:00#0 ',\n",
       " 'G1077 COMMUTER 300 LPPLLPPL X1 : f#1#18:33:00#0 d#3#18:39:00#3 h#2#18:48:00#0 ',\n",
       " 'G1079 COMMUTER 300 LPPLLPPL X1 : f#1#19:08:00#0 d#7#19:14:00#6 h#2#19:26:00#0 ',\n",
       " 'G108 COMMUTER 300 LPPLLPPL X1 : a#2#11:40:00#0 d#12#11:47:00#3 f#2#11:56:00#0 ',\n",
       " 'G1080 COMMUTER 300 LPPLLPPL X1 : h#1#20:10:00#0 d#16#20:16:00#2 f#2#20:24:00#0 ',\n",
       " 'G1083 COMMUTER 300 LPPLLPPL X1 : f#1#08:43:00#0 d#5#08:49:00#2 h#2#08:57:00#0 ',\n",
       " 'G1086 COMMUTER 300 LPPLLPPL X1 : h#1#12:26:00#0 d#16#12:32:00#4 f#2#12:42:00#0 ',\n",
       " 'G1088 COMMUTER 300 LPPLLPPL X1 : h#1#13:23:00#0 d#17#13:29:00#2 f#2#13:37:00#0 ',\n",
       " 'G1089 COMMUTER 300 LPPLLPPL X1 : f#1#16:35:00#0 d#4#16:41:00#7 h#2#16:54:00#0 ',\n",
       " 'G109 COMMUTER 300 LPPLLPPL X1 : f#1#09:34:00#0 d#5#09:40:00#2 a#1#09:49:00#0 ',\n",
       " 'G1090 COMMUTER 300 LPPLLPPL X1 : h#1#17:21:00#0 d#16#17:27:00#3 f#2#17:36:00#0 ',\n",
       " 'G1091 COMMUTER 300 LPPLLPPL X1 : f#1#17:22:00#0 d#4#17:28:00#2 h#2#17:36:00#0 ',\n",
       " 'G1094 COMMUTER 300 LPPLLPPL X1 : h#1#18:20:00#0 d#16#18:26:00#5 f#2#18:37:00#0 ',\n",
       " 'G11 COMMUTER 300 LPPLLPPL X1 : f#1#13:27:00#0 d#6#13:33:00#2 a#1#13:42:00#0 ',\n",
       " 'G110 COMMUTER 300 LPPLLPPL X1 : a#2#11:28:00#0 d#14#11:35:00#3 f#2#11:44:00#0 ',\n",
       " 'G111 COMMUTER 300 LPPLLPPL X1 : f#1#09:50:00#0 d#6#09:56:00#3 a#1#10:06:00#0 ',\n",
       " 'G112 COMMUTER 300 LPPLLPPL X1 : a#2#12:05:00#0 d#11#12:12:00#9 f#2#12:27:00#0 ',\n",
       " 'G113 COMMUTER 300 LPPLLPPL X1 : f#1#10:32:00#0 d#7#10:38:00#5 a#1#10:50:00#0 ',\n",
       " 'G114 COMMUTER 300 LPPLLPPL X1 : a#2#12:23:00#0 d#15#12:30:00#2 f#2#12:38:00#0 ',\n",
       " 'G115 COMMUTER 300 LPPLLPPL X1 : f#1#10:45:00#0 d#7#10:51:00#5 a#1#11:03:00#0 ',\n",
       " 'G116 COMMUTER 300 LPPLLPPL X1 : a#2#13:27:00#0 d#11#13:34:00#2 f#2#13:42:00#0 ',\n",
       " 'G117 COMMUTER 300 LPPLLPPL X1 : f#1#10:54:00#0 d#5#11:00:00#4 a#1#11:11:00#0 ',\n",
       " 'G118 COMMUTER 300 LPPLLPPL X1 : a#2#14:00:00#0 d#11#14:07:00#4 f#2#14:17:00#0 ',\n",
       " 'G119 COMMUTER 300 LPPLLPPL X1 : f#1#11:05:00#0 d#6#11:11:00#4 a#1#11:22:00#0 ',\n",
       " 'G12 COMMUTER 300 LPPLLPPL X1 : a#2#13:55:00#0 d#15#14:02:00#2 f#2#14:10:00#0 ',\n",
       " 'G1203 COMMUTER 300 LPPLLPPL X1 : f#1#16:53:00#0 d#5#16:59:00#4 a#1#17:10:00#0 ',\n",
       " 'G1204 COMMUTER 300 LPPLLPPL X1 : a#2#13:41:00#0 d#13#13:48:00#5 f#2#13:59:00#0 ',\n",
       " 'G1207 COMMUTER 300 LPPLLPPL X1 : f#1#16:31:00#0 d#7#16:37:00#2 h#2#16:45:00#0 ',\n",
       " 'G1208 COMMUTER 300 LPPLLPPL X1 : h#1#08:47:00#0 d#12#08:53:00#5 f#2#09:04:00#0 ',\n",
       " 'G121 COMMUTER 300 LPPLLPPL X1 : f#1#11:38:00#0 d#5#11:44:00#4 a#1#11:55:00#0 ',\n",
       " 'G1210G6939 COMMUTER 300 LPPLLPPL X1 : a#2#17:26:00#0 d#15#17:33:00#86 h#2#19:05:00#0 ',\n",
       " 'G1213 COMMUTER 300 LPPLLPPL X1 : f#1#15:48:00#0 d#5#15:54:00#3 a#1#16:04:00#0 ',\n",
       " 'G1214 COMMUTER 300 LPPLLPPL X1 : a#2#14:21:00#0 d#11#14:28:00#2 f#2#14:36:00#0 ',\n",
       " 'G122 COMMUTER 300 LPPLLPPL X1 : a#2#14:29:00#0 d#10#14:36:00#2 f#2#14:44:00#0 ',\n",
       " 'G1223 COMMUTER 300 LPPLLPPL X1 : f#1#13:14:00#0 d#7#13:20:00#3 a#1#13:30:00#0 ',\n",
       " 'G1224 COMMUTER 300 LPPLLPPL X1 : a#2#12:35:00#0 d#11#12:42:00#6 f#2#12:54:00#0 ',\n",
       " 'G1227 COMMUTER 300 LPPLLPPL X1 : f#1#14:09:00#0 d#6#14:15:00#4 a#1#14:26:00#0 ',\n",
       " 'G1228 COMMUTER 300 LPPLLPPL X1 : a#2#15:32:00#0 d#11#15:39:00#2 f#2#15:47:00#0 ',\n",
       " 'G123 COMMUTER 300 LPPLLPPL X1 : f#1#12:04:00#0 d#7#12:10:00#4 a#1#12:21:00#0 ',\n",
       " 'G1231 COMMUTER 300 LPPLLPPL X1 : f#1#17:59:00#0 d#6#18:05:00#3 a#1#18:15:00#0 ',\n",
       " 'G1232 COMMUTER 300 LPPLLPPL X1 : a#2#12:19:00#0 d#10#12:26:00#2 f#2#12:34:00#0 ',\n",
       " 'G1236 COMMUTER 300 LPPLLPPL X1 : a#2#13:12:00#0 d#13#13:19:00#3 f#2#13:28:00#0 ',\n",
       " 'G124 COMMUTER 300 LPPLLPPL X1 : a#2#14:37:00#0 d#12#14:44:00#2 f#2#14:52:00#0 ',\n",
       " 'G1243 COMMUTER 300 LPPLLPPL X1 : f#1#22:33:00#0 d#0#22:39:00#16 e#0#23:01:00#0 ',\n",
       " 'G1244 COMMUTER 300 LPPLLPPL X1 : b#2#07:40:00#0 d#16#07:48:00#8 f#2#08:02:00#0 ',\n",
       " 'G1247 COMMUTER 300 LPPLLPPL X1 : f#1#18:56:00#0 d#7#19:02:00#3 h#2#19:11:00#0 ',\n",
       " 'G1248 COMMUTER 300 LPPLLPPL X1 : h#1#10:56:00#0 d#16#11:02:00#3 f#2#11:11:00#0 ',\n",
       " 'G125 COMMUTER 300 LPPLLPPL X1 : f#1#12:45:00#0 d#5#12:51:00#3 a#1#13:01:00#0 ',\n",
       " 'G1251 COMMUTER 300 LPPLLPPL X1 : f#1#14:59:00#0 d#7#15:05:00#3 a#1#15:15:00#0 ',\n",
       " 'G1252 COMMUTER 300 LPPLLPPL X1 : a#2#15:20:00#0 d#12#15:27:00#3 f#2#15:36:00#0 ',\n",
       " 'G1257 COMMUTER 300 LPPLLPPL X1 : f#1#17:40:00#0 d#7#17:46:00#2 a#1#17:55:00#0 ',\n",
       " 'G1258 COMMUTER 300 LPPLLPPL X1 : a#2#14:33:00#0 d#15#14:40:00#2 f#2#14:48:00#0 ',\n",
       " 'G126 COMMUTER 300 LPPLLPPL X1 : a#2#15:07:00#0 d#12#15:14:00#4 f#2#15:24:00#0 ',\n",
       " 'G1267 COMMUTER 300 LPPLLPPL X1 : f#1#17:05:00#0 d#4#17:11:00#6 h#2#17:23:00#0 ',\n",
       " 'G1268 COMMUTER 300 LPPLLPPL X1 : h#1#08:37:00#0 d#17#08:43:00#7 f#2#08:56:00#0 ',\n",
       " 'G127 COMMUTER 300 LPPLLPPL X1 : f#1#12:49:00#0 d#6#12:55:00#3 a#1#13:05:00#0 ',\n",
       " 'G1273 COMMUTER 300 LPPLLPPL X1 : f#1#13:09:00#0 d#6#13:15:00#2 a#1#13:24:00#0 ',\n",
       " 'G1274 COMMUTER 300 LPPLLPPL X1 : a#2#13:36:00#0 d#14#13:43:00#5 f#2#13:54:00#0 ',\n",
       " 'G128 COMMUTER 300 LPPLLPPL X1 : a#2#15:28:00#0 d#14#15:35:00#2 f#2#15:43:00#0 ',\n",
       " 'G129 COMMUTER 300 LPPLLPPL X1 : f#1#12:59:00#0 d#7#13:05:00#2 a#1#13:14:00#0 ',\n",
       " 'G13 COMMUTER 300 LPPLLPPL X1 : f#1#14:24:00#0 d#5#14:30:00#2 a#1#14:39:00#0 ',\n",
       " 'G130 COMMUTER 300 LPPLLPPL X1 : a#2#16:22:00#0 d#10#16:29:00#2 f#2#16:37:00#0 ',\n",
       " 'G131 COMMUTER 300 LPPLLPPL X1 : f#1#13:03:00#0 d#5#13:09:00#3 a#1#13:19:00#0 ',\n",
       " 'G132 COMMUTER 300 LPPLLPPL X1 : a#2#16:32:00#0 d#11#16:39:00#3 f#2#16:48:00#0 ',\n",
       " 'G133 COMMUTER 300 LPPLLPPL X1 : f#1#13:33:00#0 d#7#13:39:00#5 a#1#13:51:00#0 ',\n",
       " 'G134 COMMUTER 300 LPPLLPPL X1 : a#2#16:41:00#0 d#10#16:48:00#3 f#2#16:57:00#0 ',\n",
       " 'G135 COMMUTER 300 LPPLLPPL X1 : f#1#13:53:00#0 d#5#13:59:00#4 a#1#14:10:00#0 ',\n",
       " 'G136 COMMUTER 300 LPPLLPPL X1 : a#2#16:55:00#0 d#11#17:02:00#2 f#2#17:10:00#0 ',\n",
       " 'G137 COMMUTER 300 LPPLLPPL X1 : f#1#14:30:00#0 d#6#14:36:00#2 a#1#14:45:00#0 ',\n",
       " 'G138 COMMUTER 300 LPPLLPPL X1 : a#2#17:34:00#0 d#13#17:41:00#2 f#2#17:49:00#0 ',\n",
       " 'G139 COMMUTER 300 LPPLLPPL X1 : f#1#14:45:00#0 d#6#14:51:00#2 a#1#15:00:00#0 ',\n",
       " 'G14 COMMUTER 300 LPPLLPPL X1 : a#2#15:01:00#0 d#13#15:08:00#2 f#2#15:16:00#0 ',\n",
       " 'G140 COMMUTER 300 LPPLLPPL X1 : a#2#17:38:00#0 d#11#17:45:00#2 f#2#17:53:00#0 ',\n",
       " 'G141 COMMUTER 300 LPPLLPPL X1 : f#1#15:08:00#0 d#6#15:14:00#4 a#1#15:25:00#0 ',\n",
       " 'G142 COMMUTER 300 LPPLLPPL X1 : a#2#18:14:00#0 d#12#18:21:00#2 f#2#18:29:00#0 ',\n",
       " 'G143 COMMUTER 300 LPPLLPPL X1 : f#1#15:42:00#0 d#4#15:48:00#3 a#1#15:58:00#0 ',\n",
       " 'G144 COMMUTER 300 LPPLLPPL X1 : a#2#18:45:00#0 d#13#18:52:00#2 f#2#19:00:00#0 ',\n",
       " 'G145 COMMUTER 300 LPPLLPPL X1 : f#1#15:54:00#0 d#3#16:00:00#2 a#1#16:09:00#0 ',\n",
       " 'G146 COMMUTER 300 LPPLLPPL X1 : a#2#19:08:00#0 d#13#19:15:00#4 f#2#19:25:00#0 ',\n",
       " 'G147 COMMUTER 300 LPPLLPPL X1 : f#1#16:04:00#0 d#5#16:10:00#6 a#1#16:23:00#0 ',\n",
       " 'G148 COMMUTER 300 LPPLLPPL X1 : a#2#19:45:00#0 d#12#19:52:00#3 f#2#20:01:00#0 ',\n",
       " 'G149 COMMUTER 300 LPPLLPPL X1 : f#1#16:41:00#0 d#5#16:47:00#2 a#1#16:56:00#0 ',\n",
       " 'G15 COMMUTER 300 LPPLLPPL X1 : f#1#15:17:00#0 d#5#15:23:00#2 a#1#15:32:00#0 ',\n",
       " 'G150 COMMUTER 300 LPPLLPPL X1 : a#2#20:05:00#0 d#11#20:12:00#2 f#2#20:20:00#0 ',\n",
       " 'G151 COMMUTER 300 LPPLLPPL X1 : f#1#17:35:00#0 d#6#17:41:00#3 a#1#17:51:00#0 ',\n",
       " 'G152 COMMUTER 300 LPPLLPPL X1 : a#2#20:25:00#0 d#11#20:32:00#4 f#2#20:42:00#0 ',\n",
       " 'G153 COMMUTER 300 LPPLLPPL X1 : f#1#18:05:00#0 d#7#18:11:00#10 a#1#18:28:00#0 ',\n",
       " 'G154 COMMUTER 300 LPPLLPPL X1 : a#2#20:49:00#0 d#11#20:56:00#2 f#2#21:04:00#0 ',\n",
       " 'G156 COMMUTER 300 LPPLLPPL X1 : a#2#21:20:00#0 d#11#21:27:00#3 f#2#21:36:00#0 ',\n",
       " 'G1565 COMMUTER 300 LPPLLPPL X1 : f#1#20:01:00#0 d#6#20:07:00#2 h#2#20:15:00#0 ',\n",
       " 'G1566 COMMUTER 300 LPPLLPPL X1 : h#1#09:32:00#0 d#10#09:38:00#3 f#2#09:47:00#0 ',\n",
       " 'G1567 COMMUTER 300 LPPLLPPL X1 : f#1#17:55:00#0 d#5#18:01:00#3 c#1#18:11:00#0 ',\n",
       " 'G1568 COMMUTER 300 LPPLLPPL X1 : c#2#09:08:00#0 d#11#09:15:00#3 f#2#09:24:00#0 ',\n",
       " 'G157 COMMUTER 300 LPPLLPPL X1 : f#1#18:38:00#0 d#6#18:44:00#3 a#1#18:54:00#0 ',\n",
       " 'G158 COMMUTER 300 LPPLLPPL X1 : a#2#21:24:00#0 d#13#21:31:00#4 f#2#21:41:00#0 ',\n",
       " 'G159 COMMUTER 300 LPPLLPPL X1 : f#1#18:48:00#0 d#5#18:54:00#3 a#1#19:04:00#0 ',\n",
       " 'G1595 COMMUTER 300 LPPLLPPL X1 : f#1#19:03:00#0 d#6#19:09:00#4 a#1#19:20:00#0 ',\n",
       " 'G1596 COMMUTER 300 LPPLLPPL X1 : a#2#09:49:00#0 d#12#09:56:00#3 f#2#10:05:00#0 ',\n",
       " 'G16 COMMUTER 300 LPPLLPPL X1 : a#2#16:01:00#0 d#11#16:08:00#2 f#2#16:16:00#0 ',\n",
       " 'G160 COMMUTER 300 LPPLLPPL X1 : a#2#21:36:00#0 d#11#21:43:00#3 f#2#21:52:00#0 ',\n",
       " 'G161 COMMUTER 300 LPPLLPPL X1 : f#1#19:13:00#0 d#5#19:19:00#4 a#1#19:30:00#0 ',\n",
       " 'G162 COMMUTER 300 LPPLLPPL X1 : a#2#22:06:00#0 d#11#22:13:00#4 f#2#22:23:00#0 ',\n",
       " 'G163 COMMUTER 300 LPPLLPPL X1 : f#1#19:37:00#0 d#7#19:43:00#3 a#1#19:53:00#0 ',\n",
       " 'G169 COMMUTER 300 LPPLLPPL X1 : f#1#11:25:00#0 d#5#11:31:00#3 a#1#11:41:00#0 ',\n",
       " 'G17 COMMUTER 300 LPPLLPPL X1 : f#1#16:19:00#0 d#7#16:25:00#2 a#1#16:34:00#0 ',\n",
       " 'G170 COMMUTER 300 LPPLLPPL X1 : a#2#15:36:00#0 d#12#15:43:00#3 f#2#15:52:00#0 ',\n",
       " 'G171 COMMUTER 300 LPPLLPPL X1 : f#1#08:10:00#0 d#6#08:16:00#2 a#1#08:25:00#0 ',\n",
       " 'G172 COMMUTER 300 LPPLLPPL X1 : a#2#11:06:00#0 d#10#11:13:00#4 f#2#11:23:00#0 ',\n",
       " 'G173 COMMUTER 300 LPPLLPPL X1 : f#1#08:47:00#0 d#7#08:53:00#2 a#1#09:02:00#0 ',\n",
       " 'G1731 COMMUTER 300 LPPLLPPL X1 : h#1#07:24:00#0 d#5#07:30:00#2 a#1#07:39:00#0 ',\n",
       " 'G1733 COMMUTER 300 LPPLLPPL X1 : a#2#23:09:00#0 d#17#23:16:00#5 h#2#23:27:00#0 ',\n",
       " 'G174 COMMUTER 300 LPPLLPPL X1 : a#2#12:39:00#0 d#12#12:46:00#6 f#2#12:58:00#0 ',\n",
       " 'G176 COMMUTER 300 LPPLLPPL X1 : a#2#13:02:00#0 d#12#13:09:00#3 f#2#13:18:00#0 ',\n",
       " 'G177 COMMUTER 300 LPPLLPPL X1 : f#1#09:54:00#0 d#7#10:00:00#3 a#1#10:10:00#0 ',\n",
       " 'G178 COMMUTER 300 LPPLLPPL X1 : a#2#13:31:00#0 d#12#13:38:00#4 f#2#13:48:00#0 ',\n",
       " 'G179 COMMUTER 300 LPPLLPPL X1 : f#1#10:03:00#0 d#6#10:09:00#2 a#1#10:18:00#0 ',\n",
       " 'G18 COMMUTER 300 LPPLLPPL X1 : a#2#17:02:00#0 d#14#17:09:00#2 f#2#17:17:00#0 ',\n",
       " 'G180 COMMUTER 300 LPPLLPPL X1 : a#2#15:14:00#0 d#11#15:21:00#5 f#2#15:32:00#0 ',\n",
       " 'G181 COMMUTER 300 LPPLLPPL X1 : f#1#12:28:00#0 d#5#12:34:00#5 a#1#12:46:00#0 ',\n",
       " 'G182 COMMUTER 300 LPPLLPPL X1 : a#2#14:54:00#0 d#11#15:01:00#2 f#2#15:09:00#0 ',\n",
       " 'G183 COMMUTER 300 LPPLLPPL X1 : f#1#14:34:00#0 d#7#14:40:00#2 a#1#14:49:00#0 ',\n",
       " 'G1830 COMMUTER 300 LPPLLPPL X1 : e#0#06:33:00#0 d#2#06:39:00#18 c#1#07:04:00#0 ',\n",
       " 'G1832 COMMUTER 300 LPPLLPPL X1 : c#2#22:22:00#0 d#0#22:29:00#11 e#0#22:46:00#0 ',\n",
       " 'G184 COMMUTER 300 LPPLLPPL X1 : a#2#15:51:00#0 d#12#15:58:00#4 f#2#16:08:00#0 ',\n",
       " 'G185 COMMUTER 300 LPPLLPPL X1 : f#1#15:04:00#0 d#5#15:10:00#3 a#1#15:20:00#0 ',\n",
       " 'G186 COMMUTER 300 LPPLLPPL X1 : a#2#17:11:00#0 d#13#17:18:00#4 f#2#17:28:00#0 ',\n",
       " 'G1861 COMMUTER 300 LPPLLPPL X1 : g#1#17:06:00#0 d#2#17:12:00#2 a#1#17:21:00#0 ',\n",
       " 'G1862 COMMUTER 300 LPPLLPPL X1 : a#2#11:20:00#0 d#15#11:27:00#2 g#2#11:35:00#0 ',\n",
       " 'G187 COMMUTER 300 LPPLLPPL X1 : f#1#15:12:00#0 d#7#15:18:00#11 a#1#15:36:00#0 ',\n",
       " 'G189 COMMUTER 300 LPPLLPPL X1 : f#1#16:45:00#0 d#7#16:51:00#5 a#1#17:03:00#0 ',\n",
       " 'G19 COMMUTER 300 LPPLLPPL X1 : f#1#17:16:00#0 d#5#17:22:00#2 a#1#17:31:00#0 ',\n",
       " 'G190 COMMUTER 300 LPPLLPPL X1 : a#2#18:03:00#0 d#11#18:10:00#2 f#2#18:18:00#0 ',\n",
       " 'G1907 COMMUTER 300 LPPLLPPL X1 : c#2#22:38:00#0 d#0#22:45:00#15 e#0#23:06:00#0 ',\n",
       " 'G1909 COMMUTER 300 LPPLLPPL X1 : e#0#06:13:00#0 d#3#06:19:00#18 c#1#06:44:00#0 ',\n",
       " 'G191 COMMUTER 300 LPPLLPPL X1 : f#1#17:09:00#0 d#6#17:15:00#15 a#1#17:37:00#0 ',\n",
       " 'G192 COMMUTER 300 LPPLLPPL X1 : a#2#18:36:00#0 d#10#18:43:00#2 f#2#18:51:00#0 ',\n",
       " 'G193 COMMUTER 300 LPPLLPPL X1 : f#1#17:47:00#0 d#6#17:53:00#2 a#1#18:02:00#0 ',\n",
       " 'G194 COMMUTER 300 LPPLLPPL X1 : a#2#19:40:00#0 d#11#19:47:00#2 f#2#19:55:00#0 ',\n",
       " 'G195 COMMUTER 300 LPPLLPPL X1 : f#1#17:51:00#0 d#7#17:57:00#2 a#1#18:06:00#0 ',\n",
       " 'G196 COMMUTER 300 LPPLLPPL X1 : a#2#19:26:00#0 d#10#19:33:00#3 f#2#19:42:00#0 ',\n",
       " 'G197 COMMUTER 300 LPPLLPPL X1 : f#1#09:46:00#0 d#5#09:52:00#2 a#1#10:01:00#0 ',\n",
       " 'G198 COMMUTER 300 LPPLLPPL X1 : a#2#17:15:00#0 d#10#17:22:00#4 f#2#17:32:00#0 ',\n",
       " 'G2 COMMUTER 300 LPPLLPPL X1 : a#2#10:03:00#0 d#10#10:10:00#2 f#2#10:18:00#0 ',\n",
       " 'G20 COMMUTER 300 LPPLLPPL X1 : a#2#17:53:00#0 d#11#18:00:00#3 f#2#18:09:00#0 ',\n",
       " 'G2057 COMMUTER 300 LPPLLPPL X1 : a#2#18:27:00#0 d#0#18:34:00#26 e#0#19:06:00#0 ',\n",
       " 'G2058 COMMUTER 300 LPPLLPPL X1 : e#0#09:53:00#0 d#13#09:59:00#18 a#1#10:24:00#0 ',\n",
       " 'G2065 COMMUTER 300 LPPLLPPL X1 : h#1#08:28:00#0 d#4#08:34:00#4 c#1#08:45:00#0 ',\n",
       " 'G2067 COMMUTER 300 LPPLLPPL X1 : c#2#19:30:00#0 d#13#19:37:00#7 h#2#19:50:00#0 ',\n",
       " 'G22 COMMUTER 300 LPPLLPPL X1 : a#2#19:01:00#0 d#14#19:08:00#3 f#2#19:17:00#0 ',\n",
       " 'G23 COMMUTER 300 LPPLLPPL X1 : f#1#19:26:00#0 d#7#19:32:00#2 a#1#19:41:00#0 ',\n",
       " 'G24 COMMUTER 300 LPPLLPPL X1 : a#2#20:00:00#0 d#10#20:07:00#2 f#2#20:15:00#0 ',\n",
       " 'G25 COMMUTER 300 LPPLLPPL X1 : f#1#19:30:00#0 d#5#19:36:00#2 a#1#19:45:00#0 ',\n",
       " 'G2551 COMMUTER 300 LPPLLPPL X1 : f#1#08:35:00#0 d#7#08:41:00#3 a#1#08:51:00#0 ',\n",
       " 'G2552 COMMUTER 300 LPPLLPPL X1 : a#2#09:45:00#0 d#11#09:52:00#3 f#2#10:01:00#0 ',\n",
       " 'G2553 COMMUTER 300 LPPLLPPL X1 : f#1#08:56:00#0 d#4#09:02:00#2 a#1#09:11:00#0 ',\n",
       " 'G2554 COMMUTER 300 LPPLLPPL X1 : a#2#11:44:00#0 d#10#11:51:00#3 f#2#12:00:00#0 ',\n",
       " 'G2555 COMMUTER 300 LPPLLPPL X1 : f#1#10:23:00#0 d#6#10:29:00#3 a#1#10:39:00#0 ',\n",
       " 'G2556 COMMUTER 300 LPPLLPPL X1 : a#2#12:31:00#0 d#14#12:38:00#6 f#2#12:50:00#0 ',\n",
       " 'G2557 COMMUTER 300 LPPLLPPL X1 : f#1#15:37:00#0 d#7#15:43:00#3 a#1#15:53:00#0 ',\n",
       " 'G2558 COMMUTER 300 LPPLLPPL X1 : a#2#14:15:00#0 d#14#14:22:00#3 f#2#14:31:00#0 ',\n",
       " 'G2561 COMMUTER 300 LPPLLPPL X1 : f#1#16:15:00#0 d#6#16:21:00#10 a#1#16:38:00#0 ',\n",
       " 'G2562 COMMUTER 300 LPPLLPPL X1 : a#2#15:47:00#0 d#10#15:54:00#4 f#2#16:04:00#0 ',\n",
       " 'G2563 COMMUTER 300 LPPLLPPL X1 : f#1#18:42:00#0 d#7#18:48:00#3 a#1#18:58:00#0 ',\n",
       " 'G2564 COMMUTER 300 LPPLLPPL X1 : a#2#16:11:00#0 d#15#16:18:00#3 f#2#16:27:00#0 ',\n",
       " 'G2565 COMMUTER 300 LPPLLPPL X1 : f#1#20:43:00#0 d#6#20:49:00#3 a#1#20:59:00#0 ',\n",
       " 'G2566 COMMUTER 300 LPPLLPPL X1 : a#2#18:53:00#0 d#12#19:00:00#3 f#2#19:09:00#0 ',\n",
       " 'G2568 COMMUTER 300 LPPLLPPL X1 : a#2#20:53:00#0 d#10#21:00:00#19 f#2#21:25:00#0 ',\n",
       " 'G2571 COMMUTER 300 LPPLLPPL X1 : f#1#10:49:00#0 d#6#10:55:00#5 a#1#11:07:00#0 ',\n",
       " 'G2572 COMMUTER 300 LPPLLPPL X1 : a#2#08:24:00#0 d#10#08:31:00#2 f#2#08:39:00#0 ',\n",
       " 'G2573 COMMUTER 300 LPPLLPPL X1 : f#1#13:48:00#0 d#7#13:54:00#5 h#2#14:05:00#0 ',\n",
       " 'G2575 COMMUTER 300 LPPLLPPL X1 : f#1#15:27:00#0 d#6#15:33:00#2 h#2#15:41:00#0 ',\n",
       " 'G2577 COMMUTER 300 LPPLLPPL X1 : f#1#16:49:00#0 d#6#16:55:00#5 h#2#17:06:00#0 ',\n",
       " 'G2578 COMMUTER 300 LPPLLPPL X1 : a#2#09:57:00#0 d#11#10:04:00#18 f#2#10:28:00#0 ',\n",
       " 'G2580 COMMUTER 300 LPPLLPPL X1 : h#1#10:28:00#0 d#13#10:34:00#4 f#2#10:44:00#0 ',\n",
       " 'G2581 COMMUTER 300 LPPLLPPL X1 : f#1#19:22:00#0 d#6#19:28:00#14 h#2#19:48:00#0 ',\n",
       " 'G2582 COMMUTER 300 LPPLLPPL X1 : h#1#10:23:00#0 d#14#10:29:00#4 f#2#10:39:00#0 ',\n",
       " 'G2584 COMMUTER 300 LPPLLPPL X1 : h#1#11:16:00#0 d#12#11:22:00#5 f#2#11:33:00#0 ',\n",
       " 'G2585 COMMUTER 300 LPPLLPPL X1 : f#1#20:28:00#0 d#5#20:34:00#10 a#1#20:51:00#0 ',\n",
       " 'G2586 COMMUTER 300 LPPLLPPL X1 : h#1#12:28:00#0 d#12#12:34:00#6 f#2#12:46:00#0 ',\n",
       " 'G2587 COMMUTER 300 LPPLLPPL X1 : f#1#20:38:00#0 d#4#20:44:00#4 h#2#20:54:00#0 ',\n",
       " 'G2588 COMMUTER 300 LPPLLPPL X1 : a#2#20:17:00#0 d#10#20:24:00#3 f#2#20:33:00#0 ',\n",
       " 'G2589 COMMUTER 300 LPPLLPPL X1 : f#1#21:07:00#0 d#6#21:13:00#3 a#1#21:23:00#0 ',\n",
       " 'G2590 COMMUTER 300 LPPLLPPL X1 : h#1#21:29:00#0 d#12#21:35:00#6 f#2#21:47:00#0 ',\n",
       " 'G2596 COMMUTER 300 LPPLLPPL X1 : a#2#14:49:00#0 d#14#14:56:00#2 f#2#15:04:00#0 ',\n",
       " 'G26 COMMUTER 300 LPPLLPPL X1 : a#2#21:00:00#0 d#15#21:07:00#3 f#2#21:16:00#0 ',\n",
       " 'G261 COMMUTER 300 LPPLLPPL X1 : f#1#09:58:00#0 d#5#10:04:00#3 a#1#10:14:00#0 ',\n",
       " 'G2623 COMMUTER 300 LPPLLPPL X1 : f#1#15:58:00#0 d#6#16:04:00#3 a#1#16:14:00#0 ',\n",
       " 'G2624 COMMUTER 300 LPPLLPPL X1 : a#2#12:43:00#0 d#15#12:50:00#14 f#2#13:10:00#0 ',\n",
       " 'G263 COMMUTER 300 LPPLLPPL X1 : f#1#10:40:00#0 d#4#10:46:00#6 a#1#10:59:00#0 ',\n",
       " 'G2635 COMMUTER 300 LPPLLPPL X1 : f#1#21:13:00#0 d#5#21:19:00#2 a#1#21:28:00#0 ',\n",
       " 'G2636 COMMUTER 300 LPPLLPPL X1 : a#2#08:37:00#0 d#11#08:44:00#2 f#2#08:52:00#0 ',\n",
       " 'G264 COMMUTER 300 LPPLLPPL X1 : a#2#18:49:00#0 d#10#18:56:00#3 f#2#19:05:00#0 ',\n",
       " 'G2641 COMMUTER 300 LPPLLPPL X1 : e#0#11:38:00#0 d#7#11:44:00#18 h#2#12:08:00#0 ',\n",
       " 'G2642 COMMUTER 300 LPPLLPPL X1 : h#1#20:45:00#0 d#0#20:51:00#22 e#0#21:19:00#0 ',\n",
       " 'G2647 COMMUTER 300 LPPLLPPL X1 : f#1#22:24:00#0 d#7#22:30:00#2 h#2#22:38:00#0 ',\n",
       " 'G2648 COMMUTER 300 LPPLLPPL X1 : h#1#09:14:00#0 d#12#09:20:00#4 f#2#09:30:00#0 ',\n",
       " 'G265 COMMUTER 300 LPPLLPPL X1 : f#1#11:30:00#0 d#6#11:36:00#6 a#1#11:49:00#0 ',\n",
       " 'G266 COMMUTER 300 LPPLLPPL X1 : a#2#19:18:00#0 d#11#19:25:00#2 f#2#19:33:00#0 ',\n",
       " 'G2661 COMMUTER 300 LPPLLPPL X1 : e#0#06:03:00#0 d#6#06:09:00#18 a#1#06:34:00#0 ',\n",
       " 'G2662 COMMUTER 300 LPPLLPPL X1 : a#2#15:55:00#0 d#0#16:02:00#28 e#0#16:36:00#0 ',\n",
       " 'G2663 COMMUTER 300 LPPLLPPL X1 : e#0#08:09:00#0 d#5#08:15:00#18 c#1#08:40:00#0 ',\n",
       " 'G2664 COMMUTER 300 LPPLLPPL X1 : c#2#21:32:00#0 d#0#21:39:00#22 e#0#22:07:00#0 ',\n",
       " 'G2667 COMMUTER 300 LPPLLPPL X1 : h#1#16:27:00#0 d#5#16:33:00#2 a#1#16:42:00#0 ',\n",
       " 'G2669 COMMUTER 300 LPPLLPPL X1 : a#2#12:01:00#0 d#16#12:08:00#4 h#2#12:18:00#0 ',\n",
       " 'G267 COMMUTER 300 LPPLLPPL X1 : f#1#11:55:00#0 d#6#12:01:00#5 a#1#12:13:00#0 ',\n",
       " 'G268 COMMUTER 300 LPPLLPPL X1 : a#2#20:40:00#0 d#12#20:47:00#3 f#2#20:56:00#0 ',\n",
       " 'G2697 COMMUTER 300 LPPLLPPL X1 : e#0#06:17:00#0 d#16#06:23:00#18 a#1#06:48:00#0 ',\n",
       " 'G2698 COMMUTER 300 LPPLLPPL X1 : a#2#23:24:00#0 d#0#23:31:00#14 e#0#23:51:00#0 ',\n",
       " 'G270 COMMUTER 300 LPPLLPPL X1 : a#2#21:41:00#0 d#10#21:48:00#15 f#2#22:09:00#0 ',\n",
       " 'G279 COMMUTER 300 LPPLLPPL X1 : e#0#07:02:00#0 d#6#07:08:00#18 a#1#07:33:00#0 ',\n",
       " 'G280 COMMUTER 300 LPPLLPPL X1 : a#2#17:59:00#0 d#0#18:06:00#22 e#0#18:34:00#0 ',\n",
       " 'G2815 COMMUTER 300 LPPLLPPL X1 : g#1#11:25:00#0 d#3#11:31:00#7 a#1#11:45:00#0 ',\n",
       " 'G2816 COMMUTER 300 LPPLLPPL X1 : a#2#20:35:00#0 d#16#20:42:00#7 g#2#20:55:00#0 ',\n",
       " 'G295 COMMUTER 300 LPPLLPPL X1 : e#0#06:32:00#0 d#12#06:38:00#18 a#1#07:03:00#0 ',\n",
       " 'G296 COMMUTER 300 LPPLLPPL X1 : a#2#22:10:00#0 d#14#22:17:00#1422 e#0#22:05:00#0 ',\n",
       " 'G297 COMMUTER 300 LPPLLPPL X1 : h#1#07:00:00#0 d#5#07:06:00#6 a#1#07:19:00#0 ',\n",
       " 'G299 COMMUTER 300 LPPLLPPL X1 : a#2#22:42:00#0 d#17#22:49:00#2 h#2#22:57:00#0 ',\n",
       " 'G3 COMMUTER 300 LPPLLPPL X1 : f#1#09:18:00#0 d#5#09:24:00#2 a#1#09:33:00#0 ',\n",
       " 'G301 COMMUTER 300 LPPLLPPL X1 : f#1#11:59:00#0 d#5#12:05:00#5 a#1#12:17:00#0 ',\n",
       " 'G302 COMMUTER 300 LPPLLPPL X1 : a#2#14:11:00#0 d#12#14:18:00#2 f#2#14:26:00#0 ',\n",
       " 'G303 COMMUTER 300 LPPLLPPL X1 : f#1#13:40:00#0 d#5#13:46:00#2 a#1#13:55:00#0 ',\n",
       " 'G304 COMMUTER 300 LPPLLPPL X1 : a#2#19:22:00#0 d#12#19:29:00#3 f#2#19:38:00#0 ',\n",
       " 'G31 COMMUTER 300 LPPLLPPL X1 : f#1#09:14:00#0 d#6#09:20:00#2 a#1#09:29:00#0 ',\n",
       " 'G311 COMMUTER 300 LPPLLPPL X1 : e#0#05:52:00#0 d#5#05:58:00#18 c#1#06:23:00#0 ',\n",
       " 'G312 COMMUTER 300 LPPLLPPL X1 : c#2#23:05:00#0 d#0#23:12:00#18 e#0#23:36:00#0 ',\n",
       " 'G32 COMMUTER 300 LPPLLPPL X1 : a#2#10:48:00#0 d#12#10:55:00#2 f#2#11:03:00#0 ',\n",
       " 'G321 COMMUTER 300 LPPLLPPL X1 : f#1#10:36:00#0 d#5#10:42:00#5 a#1#10:54:00#0 ',\n",
       " 'G322 COMMUTER 300 LPPLLPPL X1 : a#2#16:27:00#0 d#12#16:34:00#3 f#2#16:43:00#0 ',\n",
       " 'G323 COMMUTER 300 LPPLLPPL X1 : f#1#11:50:00#0 d#5#11:56:00#2 a#1#12:05:00#0 ',\n",
       " 'G324 COMMUTER 300 LPPLLPPL X1 : a#2#18:18:00#0 d#11#18:25:00#2 f#2#18:33:00#0 ',\n",
       " 'G325 COMMUTER 300 LPPLLPPL X1 : f#1#13:44:00#0 d#6#13:50:00#3 a#1#14:00:00#0 ',\n",
       " 'G326 COMMUTER 300 LPPLLPPL X1 : a#2#20:09:00#0 d#12#20:16:00#6 f#2#20:28:00#0 ',\n",
       " 'G329 COMMUTER 300 LPPLLPPL X1 : f#1#11:43:00#0 d#6#11:49:00#3 a#1#11:59:00#0 ',\n",
       " 'G33 COMMUTER 300 LPPLLPPL X1 : f#1#10:12:00#0 d#7#10:18:00#3 a#1#10:28:00#0 ',\n",
       " 'G330 COMMUTER 300 LPPLLPPL X1 : a#2#16:59:00#0 d#12#17:06:00#12 f#2#17:24:00#0 ',\n",
       " 'G34 COMMUTER 300 LPPLLPPL X1 : a#2#16:05:00#0 d#13#16:12:00#2 f#2#16:20:00#0 ',\n",
       " 'G344 COMMUTER 300 LPPLLPPL X1 : a#2#22:46:00#0 d#13#22:53:00#1422 e#0#22:41:00#0 ',\n",
       " 'G345 COMMUTER 300 LPPLLPPL X1 : e#0#06:22:00#0 d#13#06:28:00#18 a#1#06:53:00#0 ',\n",
       " 'G348 COMMUTER 300 LPPLLPPL X1 : a#2#22:34:00#0 d#0#22:41:00#19 e#0#23:06:00#0 ',\n",
       " 'G35 COMMUTER 300 LPPLLPPL X1 : f#1#11:13:00#0 d#7#11:19:00#2 a#1#11:28:00#0 ',\n",
       " 'G36 COMMUTER 300 LPPLLPPL X1 : a#2#19:56:00#0 d#11#20:03:00#2 f#2#20:11:00#0 ',\n",
       " 'G37 COMMUTER 300 LPPLLPPL X1 : f#1#12:12:00#0 d#5#12:18:00#2 a#1#12:27:00#0 ',\n",
       " 'G375 COMMUTER 300 LPPLLPPL X1 : g#1#09:42:00#0 d#7#09:48:00#2 a#1#09:57:00#0 ',\n",
       " 'G376 COMMUTER 300 LPPLLPPL X1 : a#2#11:57:00#0 d#17#12:04:00#3 g#2#12:13:00#0 ',\n",
       " 'G377 COMMUTER 300 LPPLLPPL X1 : g#1#17:23:00#0 d#2#17:29:00#5 a#1#17:41:00#0 ',\n",
       " 'G378 COMMUTER 300 LPPLLPPL X1 : a#2#13:23:00#0 d#15#13:30:00#5 g#2#13:41:00#0 ',\n",
       " 'G379 COMMUTER 300 LPPLLPPL X1 : g#1#17:29:00#0 d#1#17:35:00#3 a#1#17:45:00#0 ',\n",
       " 'G38 COMMUTER 300 LPPLLPPL X1 : a#2#20:56:00#0 d#13#21:03:00#3 f#2#21:12:00#0 ',\n",
       " 'G380 COMMUTER 300 LPPLLPPL X1 : a#2#18:31:00#0 d#12#18:38:00#2 g#2#18:46:00#0 ',\n",
       " 'G381 COMMUTER 300 LPPLLPPL X1 : f#1#18:22:00#0 d#7#18:28:00#2 a#1#18:37:00#0 ',\n",
       " 'G382 COMMUTER 300 LPPLLPPL X1 : a#2#14:25:00#0 d#13#14:32:00#2 f#2#14:40:00#0 ',\n",
       " 'G383 COMMUTER 300 LPPLLPPL X1 : f#1#21:45:00#0 d#6#21:51:00#2 a#1#22:00:00#0 ',\n",
       " 'G384 COMMUTER 300 LPPLLPPL X1 : a#2#08:05:00#0 d#10#08:12:00#2 f#2#08:20:00#0 ',\n",
       " 'G389 COMMUTER 300 LPPLLPPL X1 : f#1#21:29:00#0 d#7#21:35:00#5 h#2#21:46:00#0 ',\n",
       " 'G390 COMMUTER 300 LPPLLPPL X1 : h#1#08:11:00#0 d#12#08:17:00#4 f#2#08:27:00#0 ',\n",
       " 'G395 COMMUTER 300 LPPLLPPL X1 : f#1#21:56:00#0 d#5#22:02:00#4 h#2#22:12:00#0 ',\n",
       " 'G396 COMMUTER 300 LPPLLPPL X1 : h#1#08:21:00#0 d#14#08:27:00#2 f#2#08:35:00#0 ',\n",
       " 'G4 COMMUTER 300 LPPLLPPL X1 : a#2#10:08:00#0 d#12#10:15:00#2 f#2#10:23:00#0 ',\n",
       " 'G41 COMMUTER 300 LPPLLPPL X1 : f#1#14:19:00#0 d#7#14:25:00#3 a#1#14:35:00#0 ',\n",
       " 'G42 COMMUTER 300 LPPLLPPL X1 : a#2#13:50:00#0 d#12#13:57:00#3 f#2#14:06:00#0 ',\n",
       " 'G43 COMMUTER 300 LPPLLPPL X1 : f#1#17:12:00#0 d#7#17:18:00#2 a#1#17:27:00#0 ',\n",
       " 'G44 COMMUTER 300 LPPLLPPL X1 : a#2#22:01:00#0 d#13#22:08:00#3 f#2#22:17:00#0 ',\n",
       " 'G441 COMMUTER 300 LPPLLPPL X1 : f#1#08:06:00#0 d#7#08:12:00#2 a#1#08:21:00#0 ',\n",
       " 'G442 COMMUTER 300 LPPLLPPL X1 : a#2#18:41:00#0 d#11#18:48:00#2 f#2#18:56:00#0 ',\n",
       " 'G445 COMMUTER 300 LPPLLPPL X1 : f#1#12:08:00#0 d#6#12:14:00#15 a#1#12:36:00#0 ',\n",
       " 'G446 COMMUTER 300 LPPLLPPL X1 : a#2#21:16:00#0 d#12#21:23:00#3 f#2#21:32:00#0 ',\n",
       " 'G45 COMMUTER 300 LPPLLPPL X1 : f#1#08:18:00#0 d#7#08:24:00#5 a#1#08:36:00#0 ',\n",
       " 'G451 COMMUTER 300 LPPLLPPL X1 : h#1#21:20:00#0 d#6#21:26:00#6 a#1#21:39:00#0 ',\n",
       " 'G46 COMMUTER 300 LPPLLPPL X1 : a#2#21:05:00#0 d#12#21:12:00#2 f#2#21:20:00#0 ',\n",
       " 'G465 COMMUTER 300 LPPLLPPL X1 : h#1#07:29:00#0 d#6#07:35:00#2 c#1#07:44:00#0 ',\n",
       " 'G467 COMMUTER 300 LPPLLPPL X1 : c#2#21:12:00#0 d#15#21:19:00#7 h#2#21:32:00#0 ',\n",
       " 'G5 COMMUTER 300 LPPLLPPL X1 : f#1#10:16:00#0 d#5#10:22:00#3 a#1#10:32:00#0 ',\n",
       " 'G5293 COMMUTER 300 LPPLLPPL X1 : e#0#07:18:00#0 d#7#07:24:00#18 a#1#07:49:00#0 ',\n",
       " 'G5294 COMMUTER 300 LPPLLPPL X1 : a#2#19:34:00#0 d#0#19:41:00#19 e#0#20:06:00#0 ',\n",
       " 'G5297 COMMUTER 300 LPPLLPPL X1 : e#0#09:22:00#0 d#2#09:28:00#18 a#1#09:53:00#0 ',\n",
       " 'G5298 COMMUTER 300 LPPLLPPL X1 : a#2#22:18:00#0 d#0#22:25:00#22 e#0#22:53:00#0 ',\n",
       " 'G5565 COMMUTER 300 LPPLLPPL X1 : e#0#16:00:00#0 d#2#16:06:00#20 e#0#16:32:00#0 ',\n",
       " 'G5566 COMMUTER 300 LPPLLPPL X1 : e#0#08:42:00#0 d#6#08:48:00#20 e#0#09:14:00#0 ',\n",
       " 'G6 COMMUTER 300 LPPLLPPL X1 : a#2#10:52:00#0 d#11#10:59:00#2 f#2#11:07:00#0 ',\n",
       " 'G6902 COMMUTER 300 LPPLLPPL X1 : h#1#21:25:00#0 d#0#21:31:00#19 e#0#21:56:00#0 ',\n",
       " 'G6907 COMMUTER 300 LPPLLPPL X1 : h#1#16:16:00#0 d#0#16:22:00#13 e#0#16:41:00#0 ',\n",
       " 'G6910 COMMUTER 300 LPPLLPPL X1 : b#2#16:43:00#0 d#0#16:51:00#21 e#0#17:18:00#0 ',\n",
       " 'G6911 COMMUTER 300 LPPLLPPL X1 : e#0#06:50:00#0 d#3#06:56:00#18 h#2#07:20:00#0 ',\n",
       " 'G6912 COMMUTER 300 LPPLLPPL X1 : h#1#21:56:00#0 d#0#22:02:00#22 e#0#22:30:00#0 ',\n",
       " 'G6913 COMMUTER 300 LPPLLPPL X1 : e#0#10:38:00#0 d#15#10:44:00#18 b#1#11:10:00#0 ',\n",
       " 'G6915 COMMUTER 300 LPPLLPPL X1 : a#2#10:44:00#0 d#15#10:51:00#3 h#2#11:00:00#0 ',\n",
       " 'G6917 COMMUTER 300 LPPLLPPL X1 : h#1#20:31:00#0 d#1#20:37:00#2 a#1#20:46:00#0 ',\n",
       " 'G6921 COMMUTER 300 LPPLLPPL X1 : e#0#15:19:00#0 d#16#15:25:00#18 h#2#15:49:00#0 ',\n",
       " 'G6923 COMMUTER 300 LPPLLPPL X1 : e#0#09:03:00#0 d#15#09:09:00#18 h#2#09:33:00#0 ',\n",
       " 'G6925 COMMUTER 300 LPPLLPPL X1 : e#0#17:49:00#0 d#4#17:55:00#18 h#2#18:19:00#0 ',\n",
       " 'G6926 COMMUTER 300 LPPLLPPL X1 : h#1#08:16:00#0 d#0#08:22:00#22 e#0#08:50:00#0 ',\n",
       " 'G6928 COMMUTER 300 LPPLLPPL X1 : h#1#22:06:00#0 d#0#22:12:00#22 e#0#22:40:00#0 ',\n",
       " 'G6929 COMMUTER 300 LPPLLPPL X1 : e#0#12:12:00#0 d#3#12:18:00#18 h#2#12:42:00#0 ',\n",
       " 'G6930 COMMUTER 300 LPPLLPPL X1 : h#1#18:50:00#0 d#0#18:56:00#42 e#0#19:44:00#0 ',\n",
       " 'G6932G1209 COMMUTER 300 LPPLLPPL X1 : a#2#09:29:00#0 d#4#09:36:00#188 e#0#12:50:00#0 ',\n",
       " 'G6934D6031 COMMUTER 300 LPPLLPPL X1 : h#1#15:10:00#0 d#3#15:16:00#12 h#2#15:34:00#0 ',\n",
       " 'G6943 COMMUTER 300 LPPLLPPL X1 : a#2#07:43:00#0 d#14#07:50:00#2 h#2#07:58:00#0 ',\n",
       " 'G6949 COMMUTER 300 LPPLLPPL X1 : h#1#09:25:00#0 d#1#09:31:00#12 h#2#09:49:00#0 ',\n",
       " 'G6955 COMMUTER 300 LPPLLPPL X1 : h#1#12:58:00#0 d#17#13:04:00#2 h#2#13:12:00#0 ',\n",
       " 'G6957 COMMUTER 300 LPPLLPPL X1 : h#1#10:23:00#0 d#4#10:29:00#8 h#2#10:43:00#0 ',\n",
       " 'G6963 COMMUTER 300 LPPLLPPL X1 : e#0#18:11:00#0 d#13#18:17:00#18 h#2#18:41:00#0 ',\n",
       " 'G6964 COMMUTER 300 LPPLLPPL X1 : a#2#21:07:00#0 d#0#21:14:00#16 e#0#21:36:00#0 ',\n",
       " 'G6965 COMMUTER 300 LPPLLPPL X1 : e#0#07:48:00#0 d#3#07:54:00#18 a#1#08:19:00#0 ',\n",
       " 'G6968 COMMUTER 300 LPPLLPPL X1 : a#2#17:56:00#0 d#0#18:03:00#27 e#0#18:36:00#0 ',\n",
       " 'G6969 COMMUTER 300 LPPLLPPL X1 : e#0#16:56:00#0 d#1#17:02:00#18 h#2#17:26:00#0 ',\n",
       " 'G6970 COMMUTER 300 LPPLLPPL X1 : h#1#11:57:00#0 d#0#12:03:00#17 e#0#12:26:00#0 ',\n",
       " 'G6975 COMMUTER 300 LPPLLPPL X1 : h#1#19:52:00#0 d#13#19:58:00#6 h#2#20:10:00#0 ',\n",
       " 'G6977 COMMUTER 300 LPPLLPPL X1 : h#1#16:57:00#0 d#3#17:03:00#8 h#2#17:17:00#0 ',\n",
       " 'G6981 COMMUTER 300 LPPLLPPL X1 : h#1#21:41:00#0 d#3#21:47:00#11 a#1#22:05:00#0 ',\n",
       " 'G6985 COMMUTER 300 LPPLLPPL X1 : h#1#20:23:00#0 d#2#20:29:00#2 a#1#20:38:00#0 ',\n",
       " 'G6987 COMMUTER 300 LPPLLPPL X1 : a#2#07:58:00#0 d#14#08:05:00#2 h#2#08:13:00#0 ',\n",
       " 'G7 COMMUTER 300 LPPLLPPL X1 : f#1#11:17:00#0 d#6#11:23:00#3 a#1#11:33:00#0 ',\n",
       " 'G8 COMMUTER 300 LPPLLPPL X1 : a#2#11:52:00#0 d#13#11:59:00#3 f#2#12:08:00#0 ',\n",
       " 'G887 COMMUTER 300 LPPLLPPL X1 : f#1#09:31:00#0 d#6#09:37:00#2 h#2#09:45:00#0 ',\n",
       " 'G888 COMMUTER 300 LPPLLPPL X1 : h#1#17:45:00#0 d#14#17:51:00#3 f#2#18:00:00#0 ',\n",
       " 'G9 COMMUTER 300 LPPLLPPL X1 : f#1#12:16:00#0 d#7#12:22:00#2 a#1#12:31:00#0 ']"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "timeTable = open(file=TextPath, mode=\"w\")  # 覆盖写入txt\n",
    "finalRes = []\n",
    "for i in range(0, len(arriveStList)):\n",
    "    tstr = \"{0}{1} {2} {3} \".format(\n",
    "        trainList[i], arriveStList[i], stopStList[i], leaveStList[i])\n",
    "    finalRes.append(tstr)  # 用于展示的列表\n",
    "    tstr1 = tstr+'\\n'\n",
    "    timeTable.writelines(tstr1)  # 按行写入\n",
    "\n",
    "timeTable.close()\n",
    "finalRes\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "vscode": {
     "languageId": "html"
    }
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.2"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
